#!/usr/bin/perl --
use strict;
use warnings;
use lib '/home/dsktnk/local/lib/perl5';
use encoding "utf8";
use Path::Class;
use Text::Markdown::Discount qw/markdown/;
use YAML::XS;
use CGI;
use Data::Pageset;


my $obj = new CGI;

my $page = $obj->param('p');
$page ||= "1";


my $baseurl="http://dsktnk.sakura.ne.jp/memo/";


print qq|Content-type: text/html\n\n|;
print &header_html;
print qq|<h1>homepage of dsktnk</h1>|;


#繝�ぅ繝ャ繧ッ繝医Μ驟堺ク九↓縺ゅk繝輔ぃ繧、繝ォ繝ェ繧ケ繝医r菴懈��亥�蟶ー逧�シ�
my @files;
Path::Class::Dir->new("/home/dsktnk/www/memo")->recurse(
    callback => sub {
        my $file = shift;
        return if $file->is_dir; #繝�ぅ繝ャ繧ッ繝医Μ縺ッ繧ケ繧ュ繝��
        if ($file=~/.md$/){
        push(@files, $file);
      }
    },
);
#譖エ譁ー譎る俣縺ァ繧ス繝シ繝医@縺ェ縺後i驟榊�縺ォ蜈・繧後k
@files = sort {$b->stat->mtime <=> $a->stat->mtime} @files;


my $total_entries=@files;
my $current_page=$page;
my $entries_per_page =5;
my $pages_per_set = 10;

my $page_info = Data::Pageset->new({
  'total_entries'    => $total_entries,    #縺吶∋縺ヲ縺ョ隕∫エ�謨ー(蜈ィ繝偵ャ繝域焚)
  'entries_per_page' => $entries_per_page, #1繝壹�繧ク縺ゅ◆繧翫�隕∫エ�陦ィ遉コ謨ー
  'current_page'     => $current_page,     #迴セ蝨ィ縺ョ繝壹�繧ク
  'pages_per_set'    => $pages_per_set,    #1繝壹�繧ク縺ゅ◆繧翫�繝壹�繧ク繝ウ繧ー謨ー => 10
  'mode'             => 'slide',           #繝壹�繧ク繝ウ繧ー繧定。ィ遉コ繝壹�繧ク蟷�r蝗コ螳壹☆繧九°繧ケ繝ゥ繧、繝峨☆繧九°
                                           #'slide' or 'fixed'
});


my $CarrentMinNum = ($page - 1) * ($entries_per_page + 1);
my $CarrentMaxNum = $CarrentMinNum + $entries_per_page;

for my $f (@files[$CarrentMinNum..$CarrentMaxNum]){
  if ($f=~/.md$/){
  my $data = $f->slurp;

#stat
#譖エ譁ー譎る俣縺ィ繝輔ぃ繧、繝ォ繧オ繧、繧コ繧貞叙蠕�
  my $mtime = localtime($f->stat->mtime);
  my $file_size = $f->stat->size;

#譎る俣
    my ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime($f->stat->mtime);
    $year += 1900;
    ++$month;
    my @wdays = ("譌・", "譛�", "轣ォ", "豌エ", "譛ィ", "驥�", "蝨�");

# YAML frontmatter
my ($yaml_frontmatter,@y_line);
  if ($data =~/^-{3}${1}(.*?)-{3}${1}/s){
      $yaml_frontmatter = "$1";
  }

my $yf = YAML::XS::Load($yaml_frontmatter);

# Markdown
  my @line = split ( /\n/ , $data );
  my ($ln,$line);
  my $i=0;
  my $item ="---";

  foreach $ln(@line){
      if ($ln =~ /^$item/){
          $i++;
      }
      elsif($i>1){
          $line .= "$ln\n";
      }
  }

#讎りヲ�
my $description = substr($line, 0, 400);
$description =~s/^.*\n=+$//m;
$description =~s/^#[^#]*?$"//m;
my $html = markdown($description);

#繝輔ぃ繧、繝ォ繝阪�繝�繧貞叙蠕�
  my $file = file($f);
  my $basename=$file->basename;
  #逶ク蟇セ繝代せ繧貞叙蠕�
  my $fileurl=$file->relative;


  printf "<a href=\"$baseurl$fileurl\"><h2>%04d/%02d/%02d %02d:%02d<\/h2><\/a>", $year, $month, $mday, $hour, $min, $sec;
 # print qq|<a href="$baseurl$fileurl">$yf->{title}</a></h2>|;
 # print "Filename:$basename縲€譛€邨よ峩譁ー譌・譎�:$mtime $file_size(byte)<br>";
 print "$html<br><br>";
  }
}

print "<br>";
#蜑阪∈
if ($page_info->previous_page) {
  print "<a href='?p=" . $page_info->previous_page . "'>&lt;&lt;&nbsp;蜑阪∈</a>\n";
}

#繝壹�繧ク蛻・繝ェ繝ウ繧ッ
foreach my $page (@{$page_info->pages_in_set()}) {
  if($page == $page_info->current_page()) {
    print "&nbsp;<strong>$page</strong>\n&nbsp;";
  } else {
    print "&nbsp;<a href='?p=" . $page . "'>$page</a>\n&nbsp;";
  }
}


#谺。縺ク
if ($page_info->next_page) {
  print "<a href='?p=" . $page_info->next_page . "'>谺。縺ク&nbsp;&gt;&gt;</a>\n";
}


sub header_html{
my $printlines = <<"__EOF__";
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="Content-Style-Type" content="text/css" />
	<meta name="author" content="dsk" />
	<link rel="stylesheet" href="http://dsktnk.sakura.ne.jp/test/github-markdown-css/github-markdown.css" type="text/css">
<style>
        .markdown-body {
            min-width: 200px;
            max-width: 790px;
            margin: 0 auto;
            padding: 30px;
        }
    </style>
</head>
<body>
<article class="markdown-body">
__EOF__
return $printlines;
}